<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no">
<title>Mobilebone.js API文档-data-reload</title>
<link rel="stylesheet" href="../../src/mobilebone.css">
<link rel="stylesheet" href="../assets/docs.css">
</head>

<body>
<header id="header"></header>
<aside id="aside"></aside>
<div class="page out">
	<div class="content">
    	<h2>data-reload</h2>
        <p><strong>(v2.4.4+)</strong>主要针对Ajax请求。默认情况下，Mobilebone会缓存所有的Ajax请求（内存中），也就是第二次点击同样地址的时候，不是去重新拉数据，而是直接显示之前已经加载的页面。但是，如果你希望请求的页面不被缓存（每次都重新加载页面），则就需要使用这里的<code>data-reload</code>参数。</p>
        <p>你可以当作布尔属性使用，例如：<code>data-reload</code>或者跟随不为<code>"false"</code>的属性值，例如：<code>data-reload="true"</code>.</p>
        <p><strong>(v2.7.0+)</strong>Mobilebone取消了Ajax请求的url地址做智能判断，因为根据反馈的issues来看，是无法根据URL地址判断是否是一种类别地址的，因为不同项目的rewrite规则是不一样的，例如列表详情页，可能是这种格式：</p>
        <pre>//xxx.com/list.php
//xxx.com/detail.php?id=1
//xxx.com/detail.php?id=2</pre>
        <p>也可能这种：</p>
        <pre>//xxx.com/list/111/
//xxx.com/list/222/
//xxx.com/list/333/</pre>
        <p>也可能是和列表页长得很像：</p>
        <pre>//xxx.com/index.php          列表页
//xxx.com/index.php?list=1   列表详情页1
//xxx.com/index.php?list=2   列表详情页2</pre>
        <p>等等，防不胜防。</p>
        <p>如果想要对这类页面进行删除，释放内存，可以使用<code><a href="Mobilebone.remove.html">Mobilebone.remove()</a></code>方法。</p>
        <p><strong>(v2.7.2+)</strong>Mobilebone使用另外一直方法来识别URL地址是否是同一类别地址，就是设置<code>data-reload</code>为同一个ID值即可！</p>
        <p>这个ID的命名没有要求，只要不是<code>'true'</code>和<code>'false'</code>即可。当触发加载的时候，Mobilebone会自动删除和这个ID一直的页面元素，保证同类型页面的唯一性，例如：</p>
        <pre>&lt;ul&gt;
    &lt;li&gt;&lt;a href="detail.html?v=1" data-reload="anyUniqueId"&gt;唯一详情页加载测试&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="detail.html?v=2" data-reload="anyUniqueId"&gt;唯一详情页加载测试&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="detail.html?v=3" data-reload="anyUniqueId"&gt;唯一详情页加载测试&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="detail.html?v=4" data-reload="anyUniqueId"&gt;唯一详情页加载测试&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</pre>
        <p>当我们点击任意详情页的时候，会自动删除之前已经加载的详情页，保证内容干净不冲突。</p>
        <p></p>
        <div><strong>(以下v2.7.0移除，不保证完全兼容)</strong></div>
        <del datetime="2017-11-19 19:27">
            <p>Mobilebone会对Ajax请求的url地址做智能判断，页面上，永远只会有一个同根页面。例如，页面上有两个请求：</p>
            <pre>&lt;a href="detail.php?id=1">请求详情页1&lt;/a></pre>
            <pre>&lt;a href="detail.php?id=2">请求详情页2&lt;/a></pre>
            <p>当点击“请求详情页1”的时候，Mobilebone会Ajax请求该页面内容，并载入；此时我们返回，再次点击该页面，则不会有请求，页面直接载入(因为没有没有设置<code>data-reload</code>)；此时，或者之前，我们我们返回，点击“请求详情页2”，由于这两个页面的查询字符串之前的根地址是一样的，都是<code>detail.php</code>，因此，Mobilebone会删除第一个页面，Ajax请求第2个页面；此时，再点击第1个页面，注意，Mobilebone会从内存中载入第1个页面，不会有额外的请求。</p>
            <p>有多位同行提出关于内存的问题。如果是一般的偏展示的页面，所占用内存非常有限，因此，可以尽量不使用<code>data-reload</code>, 以获得更流畅的体验。但是，如果是功能性比较强的页面，比方说商品列表，50条，每条都指向一个动态页面，则由于Mobilebone默认会把页面HTML存在内存中，虽然每个页面占用内存很小（纯字符串），但如果也页面很多，一定的累积还是会有影响的，此时，可以添加<code>data-reload</code>，每次都动态载入，Mobilebone会及时清理上一个页面在内存中的存储，有效降低资源占用。总而言之，言而总之，还是要根据实际项目和个人喜好做判断，实际上，一般内存占用的瓶颈肯定不是字符串占用，更多的是糟糕脚本带来的巨大开销。</p>
            <p>另外，所有的form表单提交都不会缓存页面内容，天生外挂<code>data-reload</code>。</p>
            <p>最后，v2.3.2新增的<code>data-reload="root"</code>已经没有存在价值，是个有些多余的设计，之前有这么使用的朋友不要担心，不会有影响，无需改动。</p>
        </del>
        <p>&nbsp;</p>
        <div><strong>(以下v2.4.4移除，向前兼容)</strong></div>
        <del datetime="2015-04-09 23:37">
        <p>主要针对Ajax请求。默认情况下，Mobilebone会缓存所有的Ajax请求，也就是第二次点击同样地址的时候，不是去重新拉数据，而是直接显示之前已经加载的页面。但是，如果你希望请求的页面不被缓存（每次都重新加载页面），则就需要使用这里的<code>data-reload</code>参数。</p>
        <p>目前有两种使用场景：</p>
        <ol>
        	<li><strong>url完整地址重加载</strong>：<code>data-reload</code>/<code>data-reload="true"</code>.</li>
            <li><strong>url根地址重新加载</strong>：<code>data-reload="root"</code> (v2.3.2+)</li>
        </ol>
        <p>分别表示什么意思呢？</p>
        <h4>url完整地址重加载</h4>
        <p>如下两个请求：</p>
        <pre>&lt;a href="detail.php?id=112" data-reload="true">请求详情页&lt;/a></pre>
        <pre>&lt;a href="detail.php?id=113" data-reload="true">请求详情页&lt;/a></pre>
        <p>可以看到查询<code>id</code>是不一样的。所谓“完整地址重加载”是指，只有在第二次请求的页面<code>url</code>(包括查询字符串)完全匹配的时候，才移除缓存，重新加载！</p>
        <p>比方说上面的两个请求，最后页面HTML会有两个独立的页面。</p>
        <h4>url根地址重加载</h4>
        <p>请求地址还是一样，但<code>data-reload</code>值为<code>root</code>:</p>
        <pre>&lt;a href="detail.php?id=112" data-reload="root">请求详情页&lt;/a></pre>
        <pre>&lt;a href="detail.php?id=113" data-reload="root">请求详情页&lt;/a></pre>
        <p>这里的就是“根地址重加载”，指只要Ajax请求的url的根地址是一样的，就不会缓存，直接清除之前同源页面。</p>
        <p>所以，这里，页面上永远最多就一个详情页对应HTML. 很多小伙伴喜欢使用全局<code>id</code>绑定事件，此时，就务必需要设置<code>data-reload="root"</code>, 以免<code>id</code>冲突，事件重复绑定等问题。</p>
        </del>
    </div>
</div>

<script src="../../src/mobilebone.js"></script>
<script>
Mobilebone.captureLink = false;
window.navKey = "data-reload";
</script>
<script src="nav.js"></script>
<script src="../assets/docs.js"></script>
</body>
</html>
